home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / tex31 / texsrc.lzh / TEXSRC.LZH / tex9.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-28  |  30.1 KB  |  1,143 lines

  1. #define EXTERN extern
  2. #include "texd.h"
  3.  
  4. void flushmath ( ) 
  5. {flushmath_regmem 
  6.   flushnodelist ( mem [ curlist .headfield ] .hh .v.RH ) ; 
  7.   flushnodelist ( curlist .auxfield .cint ) ; 
  8.   mem [ curlist .headfield ] .hh .v.RH = 0 ; 
  9.   curlist .tailfield = curlist .headfield ; 
  10.   curlist .auxfield .cint = 0 ; 
  11. halfword zcleanbox ( p , s ) 
  12. halfword p ; 
  13. smallnumber s ; 
  14. {/* 40 */ register halfword Result; cleanbox_regmem 
  15.   halfword q  ; 
  16.   smallnumber savestyle  ; 
  17.   halfword x  ; 
  18.   halfword r  ; 
  19.   switch ( mem [ p ] .hh .v.RH ) 
  20.   {case 1 : 
  21.     {
  22.       curmlist = newnoad () ; 
  23.       mem [ curmlist + 1 ] = mem [ p ] ; 
  24.     } 
  25.     break ; 
  26.   case 2 : 
  27.     {
  28.       q = mem [ p ] .hh .v.LH ; 
  29.       goto lab40 ; 
  30.     } 
  31.     break ; 
  32.   case 3 : 
  33.     curmlist = mem [ p ] .hh .v.LH ; 
  34.     break ; 
  35.     default: 
  36.     {
  37.       q = newnullbox () ; 
  38.       goto lab40 ; 
  39.     } 
  40.     break ; 
  41.   } 
  42.   savestyle = curstyle ; 
  43.   curstyle = s ; 
  44.   mlistpenalties = false ; 
  45.   mlisttohlist () ; 
  46.   q = mem [ memtop - 3 ] .hh .v.RH ; 
  47.   curstyle = savestyle ; 
  48.   {
  49.     if ( curstyle < 4 ) 
  50.     cursize = 0 ; 
  51.     else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  52.     curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] .hh 
  53.     .v.RH ] ] .cint , 18 ) ; 
  54.   } 
  55.   lab40: if ( ( q >= himemmin ) || ( q == 0 ) ) 
  56.   x = hpack ( q , 0 , 1 ) ; 
  57.   else if ( ( mem [ q ] .hh .v.RH == 0 ) && ( mem [ q ] .hh.b0 <= 1 ) && ( mem 
  58.   [ q + 4 ] .cint == 0 ) ) 
  59.   x = q ; 
  60.   else x = hpack ( q , 0 , 1 ) ; 
  61.   q = mem [ x + 5 ] .hh .v.RH ; 
  62.   if ( ( q >= himemmin ) ) 
  63.   {
  64.     r = mem [ q ] .hh .v.RH ; 
  65.     if ( r != 0 ) 
  66.     if ( mem [ r ] .hh .v.RH == 0 ) 
  67.     if ( ! ( r >= himemmin ) ) 
  68.     if ( mem [ r ] .hh.b0 == 11 ) 
  69.     {
  70.       freenode ( r , 2 ) ; 
  71.       mem [ q ] .hh .v.RH = 0 ; 
  72.     } 
  73.   } 
  74.   Result = x ; 
  75.   return(Result) ; 
  76. void zfetch ( a ) 
  77. halfword a ; 
  78. {fetch_regmem 
  79.   curc = mem [ a ] .hh.b1 ; 
  80.   curf = eqtb [ 4835 + mem [ a ] .hh.b0 + cursize ] .hh .v.RH ; 
  81.   if ( curf == 0 ) 
  82.   {
  83.     {
  84.       if ( interaction == 3 ) 
  85.       wakeupterminal () ; 
  86.       printnl ( 262 ) ; 
  87.       print ( 335 ) ; 
  88.     } 
  89.     printsize ( cursize ) ; 
  90.     printchar ( 32 ) ; 
  91.     printint ( mem [ a ] .hh.b0 ) ; 
  92.     print ( 877 ) ; 
  93.     print ( curc ) ; 
  94.     printchar ( 41 ) ; 
  95.     {
  96.       helpptr = 4 ; 
  97.       helpline [ 3 ] = 878 ; 
  98.       helpline [ 2 ] = 879 ; 
  99.       helpline [ 1 ] = 880 ; 
  100.       helpline [ 0 ] = 881 ; 
  101.     } 
  102.     error () ; 
  103.     curi = nullcharacter ; 
  104.     mem [ a ] .hh .v.RH = 0 ; 
  105.   } 
  106.   else {
  107.       
  108.     if ( ( curc >= fontbc [ curf ] ) && ( curc <= fontec [ curf ] ) ) 
  109.     curi = fontinfo [ charbase [ curf ] + curc ] .qqqq ; 
  110.     else curi = nullcharacter ; 
  111.     if ( ! ( ( curi .b0 > 0 ) ) ) 
  112.     {
  113.       charwarning ( curf , curc ) ; 
  114.       mem [ a ] .hh .v.RH = 0 ; 
  115.     } 
  116.   } 
  117. void zmakeover ( q ) 
  118. halfword q ; 
  119. {makeover_regmem 
  120.   mem [ q + 1 ] .hh .v.LH = overbar ( cleanbox ( q + 1 , 2 * ( curstyle / 2 ) 
  121.   + 1 ) , 3 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] 
  122.   .cint , fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] 
  123.   .cint ) ; 
  124.   mem [ q + 1 ] .hh .v.RH = 2 ; 
  125. void zmakeunder ( q ) 
  126. halfword q ; 
  127. {makeunder_regmem 
  128.   halfword p, x, y  ; 
  129.   scaled delta  ; 
  130.   x = cleanbox ( q + 1 , curstyle ) ; 
  131.   p = newkern ( 3 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh 
  132.   .v.RH ] ] .cint ) ; 
  133.   mem [ x ] .hh .v.RH = p ; 
  134.   mem [ p ] .hh .v.RH = fractionrule ( fontinfo [ 8 + parambase [ eqtb [ 4838 
  135.   + cursize ] .hh .v.RH ] ] .cint ) ; 
  136.   y = vpackage ( x , 0 , 1 , 1073741823L ) ; 
  137.   delta = mem [ y + 3 ] .cint + mem [ y + 2 ] .cint + fontinfo [ 8 + parambase 
  138.   [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint ; 
  139.   mem [ y + 3 ] .cint = mem [ x + 3 ] .cint ; 
  140.   mem [ y + 2 ] .cint = delta - mem [ y + 3 ] .cint ; 
  141.   mem [ q + 1 ] .hh .v.LH = y ; 
  142.   mem [ q + 1 ] .hh .v.RH = 2 ; 
  143. void zmakevcenter ( q ) 
  144. halfword q ; 
  145. {makevcenter_regmem 
  146.   halfword v  ; 
  147.   scaled delta  ; 
  148.   v = mem [ q + 1 ] .hh .v.LH ; 
  149.   if ( mem [ v ] .hh.b0 != 1 ) 
  150.   confusion ( 535 ) ; 
  151.   delta = mem [ v + 3 ] .cint + mem [ v + 2 ] .cint ; 
  152.   mem [ v + 3 ] .cint = fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] 
  153.   .hh .v.RH ] ] .cint + half ( delta ) ; 
  154.   mem [ v + 2 ] .cint = delta - mem [ v + 3 ] .cint ; 
  155. void zmakeradical ( q ) 
  156. halfword q ; 
  157. {makeradical_regmem 
  158.   halfword x, y  ; 
  159.   scaled delta, clr  ; 
  160.   x = cleanbox ( q + 1 , 2 * ( curstyle / 2 ) + 1 ) ; 
  161.   if ( curstyle < 2 ) 
  162.   clr = fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint 
  163.   + ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] 
  164.   .cint ) / 4 ) ; 
  165.   else {
  166.       
  167.     clr = fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] 
  168.     .cint ; 
  169.     clr = clr + ( abs ( clr ) / 4 ) ; 
  170.   } 
  171.   y = vardelimiter ( q + 4 , cursize , mem [ x + 3 ] .cint + mem [ x + 2 ] 
  172.   .cint + clr + fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] 
  173.   ] .cint ) ; 
  174.   delta = mem [ y + 2 ] .cint - ( mem [ x + 3 ] .cint + mem [ x + 2 ] .cint + 
  175.   clr ) ; 
  176.   if ( delta > 0 ) 
  177.   clr = clr + half ( delta ) ; 
  178.   mem [ y + 4 ] .cint = - (integer) ( mem [ x + 3 ] .cint + clr ) ; 
  179.   mem [ y ] .hh .v.RH = overbar ( x , clr , mem [ y + 3 ] .cint ) ; 
  180.   mem [ q + 1 ] .hh .v.LH = hpack ( y , 0 , 1 ) ; 
  181.   mem [ q + 1 ] .hh .v.RH = 2 ; 
  182. void zmakemathaccent ( q ) 
  183. halfword q ; 
  184. {/* 30 31 */ makemathaccent_regmem 
  185.   halfword p, x, y  ; 
  186.   integer a  ; 
  187.   quarterword c  ; 
  188.   internalfontnumber f  ; 
  189.   fourquarters i  ; 
  190.   scaled s  ; 
  191.   scaled h  ; 
  192.   scaled delta  ; 
  193.   scaled w  ; 
  194.   fetch ( q + 4 ) ; 
  195.   if ( ( curi .b0 > 0 ) ) 
  196.   {
  197.     i = curi ; 
  198.     c = curc ; 
  199.     f = curf ; 
  200.     s = 0 ; 
  201.     if ( mem [ q + 1 ] .hh .v.RH == 1 ) 
  202.     {
  203.       fetch ( q + 1 ) ; 
  204.       if ( ( ( curi .b2 ) % 4 ) == 1 ) 
  205.       {
  206.     a = ligkernbase [ curf ] + curi .b3 ; 
  207.     curi = fontinfo [ a ] .qqqq ; 
  208.     if ( curi .b0 > 128 ) 
  209.     {
  210.       a = ligkernbase [ curf ] + 256 * curi .b2 + curi .b3 + 32768L - 256 
  211.       * ( 128 ) ; 
  212.       curi = fontinfo [ a ] .qqqq ; 
  213.     } 
  214.     while ( true ) {
  215.         
  216.       if ( curi .b1 == skewchar [ curf ] ) 
  217.       {
  218.         if ( curi .b2 >= 128 ) 
  219.         if ( curi .b0 <= 128 ) 
  220.         s = fontinfo [ kernbase [ curf ] + 256 * curi .b2 + curi .b3 ] 
  221.         .cint ; 
  222.         goto lab31 ; 
  223.       } 
  224.       if ( curi .b0 >= 128 ) 
  225.       goto lab31 ; 
  226.       a = a + curi .b0 + 1 ; 
  227.       curi = fontinfo [ a ] .qqqq ; 
  228.     } 
  229.       } 
  230.     } 
  231.     lab31: ; 
  232.     x = cleanbox ( q + 1 , 2 * ( curstyle / 2 ) + 1 ) ; 
  233.     w = mem [ x + 1 ] .cint ; 
  234.     h = mem [ x + 3 ] .cint ; 
  235.     while ( true ) {
  236.     
  237.       if ( ( ( i .b2 ) % 4 ) != 2 ) 
  238.       goto lab30 ; 
  239.       y = i .b3 ; 
  240.       i = fontinfo [ charbase [ f ] + y ] .qqqq ; 
  241.       if ( ! ( i .b0 > 0 ) ) 
  242.       goto lab30 ; 
  243.       if ( fontinfo [ widthbase [ f ] + i .b0 ] .cint > w ) 
  244.       goto lab30 ; 
  245.       c = y ; 
  246.     } 
  247.     lab30: ; 
  248.     if ( h < fontinfo [ 5 + parambase [ f ] ] .cint ) 
  249.     delta = h ; 
  250.     else delta = fontinfo [ 5 + parambase [ f ] ] .cint ; 
  251.     if ( ( mem [ q + 2 ] .hh .v.RH != 0 ) || ( mem [ q + 3 ] .hh .v.RH != 0 ) 
  252.     ) 
  253.     if ( mem [ q + 1 ] .hh .v.RH == 1 ) 
  254.     {
  255.       flushnodelist ( x ) ; 
  256.       x = newnoad () ; 
  257.       mem [ x + 1 ] = mem [ q + 1 ] ; 
  258.       mem [ x + 2 ] = mem [ q + 2 ] ; 
  259.       mem [ x + 3 ] = mem [ q + 3 ] ; 
  260.       mem [ q + 2 ] .hh = emptyfield ; 
  261.       mem [ q + 3 ] .hh = emptyfield ; 
  262.       mem [ q + 1 ] .hh .v.RH = 3 ; 
  263.       mem [ q + 1 ] .hh .v.LH = x ; 
  264.       x = cleanbox ( q + 1 , curstyle ) ; 
  265.       delta = delta + mem [ x + 3 ] .cint - h ; 
  266.       h = mem [ x + 3 ] .cint ; 
  267.     } 
  268.     y = charbox ( f , c ) ; 
  269.     mem [ y + 4 ] .cint = s + half ( w - mem [ y + 1 ] .cint ) ; 
  270.     mem [ y + 1 ] .cint = 0 ; 
  271.     p = newkern ( - (integer) delta ) ; 
  272.     mem [ p ] .hh .v.RH = x ; 
  273.     mem [ y ] .hh .v.RH = p ; 
  274.     y = vpackage ( y , 0 , 1 , 1073741823L ) ; 
  275.     mem [ y + 1 ] .cint = mem [ x + 1 ] .cint ; 
  276.     if ( mem [ y + 3 ] .cint < h ) 
  277.     {
  278.       p = newkern ( h - mem [ y + 3 ] .cint ) ; 
  279.       mem [ p ] .hh .v.RH = mem [ y + 5 ] .hh .v.RH ; 
  280.       mem [ y + 5 ] .hh .v.RH = p ; 
  281.       mem [ y + 3 ] .cint = h ; 
  282.     } 
  283.     mem [ q + 1 ] .hh .v.LH = y ; 
  284.     mem [ q + 1 ] .hh .v.RH = 2 ; 
  285.   } 
  286. void zmakefraction ( q ) 
  287. halfword q ; 
  288. {makefraction_regmem 
  289.   halfword p, v, x, y, z  ; 
  290.   scaled delta, delta1, delta2, shiftup, shiftdown, clr  ; 
  291.   if ( mem [ q + 1 ] .cint == 1073741824L ) 
  292.   mem [ q + 1 ] .cint = fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh 
  293.   .v.RH ] ] .cint ; 
  294.   x = cleanbox ( q + 2 , curstyle + 2 - 2 * ( curstyle / 6 ) ) ; 
  295.   z = cleanbox ( q + 3 , 2 * ( curstyle / 2 ) + 3 - 2 * ( curstyle / 6 ) ) ; 
  296.   if ( mem [ x + 1 ] .cint < mem [ z + 1 ] .cint ) 
  297.   x = rebox ( x , mem [ z + 1 ] .cint ) ; 
  298.   else z = rebox ( z , mem [ x + 1 ] .cint ) ; 
  299.   if ( curstyle < 2 ) 
  300.   {
  301.     shiftup = fontinfo [ 8 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] 
  302.     .cint ; 
  303.     shiftdown = fontinfo [ 11 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH 
  304.     ] ] .cint ; 
  305.   } 
  306.   else {
  307.       
  308.     shiftdown = fontinfo [ 12 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH 
  309.     ] ] .cint ; 
  310.     if ( mem [ q + 1 ] .cint != 0 ) 
  311.     shiftup = fontinfo [ 9 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] 
  312.     .cint ; 
  313.     else shiftup = fontinfo [ 10 + parambase [ eqtb [ 4837 + cursize ] .hh 
  314.     .v.RH ] ] .cint ; 
  315.   } 
  316.   if ( mem [ q + 1 ] .cint == 0 ) 
  317.   {
  318.     if ( curstyle < 2 ) 
  319.     clr = 7 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] 
  320.     .cint ; 
  321.     else clr = 3 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh 
  322.     .v.RH ] ] .cint ; 
  323.     delta = half ( clr - ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ z + 3 ] 
  324.     .cint - shiftdown ) ) ) ; 
  325.     if ( delta > 0 ) 
  326.     {
  327.       shiftup = shiftup + delta ; 
  328.       shiftdown = shiftdown + delta ; 
  329.     } 
  330.   } 
  331.   else {
  332.       
  333.     if ( curstyle < 2 ) 
  334.     clr = 3 * mem [ q + 1 ] .cint ; 
  335.     else clr = mem [ q + 1 ] .cint ; 
  336.     delta = half ( mem [ q + 1 ] .cint ) ; 
  337.     delta1 = clr - ( ( shiftup - mem [ x + 2 ] .cint ) - ( fontinfo [ 22 + 
  338.     parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] .cint + delta ) ) ; 
  339.     delta2 = clr - ( ( fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh 
  340.     .v.RH ] ] .cint - delta ) - ( mem [ z + 3 ] .cint - shiftdown ) ) ; 
  341.     if ( delta1 > 0 ) 
  342.     shiftup = shiftup + delta1 ; 
  343.     if ( delta2 > 0 ) 
  344.     shiftdown = shiftdown + delta2 ; 
  345.   } 
  346.   v = newnullbox () ; 
  347.   mem [ v ] .hh.b0 = 1 ; 
  348.   mem [ v + 3 ] .cint = shiftup + mem [ x + 3 ] .cint ; 
  349.   mem [ v + 2 ] .cint = mem [ z + 2 ] .cint + shiftdown ; 
  350.   mem [ v + 1 ] .cint = mem [ x + 1 ] .cint ; 
  351.   if ( mem [ q + 1 ] .cint == 0 ) 
  352.   {
  353.     p = newkern ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ z + 3 ] .cint - 
  354.     shiftdown ) ) ; 
  355.     mem [ p ] .hh .v.RH = z ; 
  356.   } 
  357.   else {
  358.       
  359.     y = fractionrule ( mem [ q + 1 ] .cint ) ; 
  360.     p = newkern ( ( fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh 
  361.     .v.RH ] ] .cint - delta ) - ( mem [ z + 3 ] .cint - shiftdown ) ) ; 
  362.     mem [ y ] .hh .v.RH = p ; 
  363.     mem [ p ] .hh .v.RH = z ; 
  364.     p = newkern ( ( shiftup - mem [ x + 2 ] .cint ) - ( fontinfo [ 22 + 
  365.     parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] .cint + delta ) ) ; 
  366.     mem [ p ] .hh .v.RH = y ; 
  367.   } 
  368.   mem [ x ] .hh .v.RH = p ; 
  369.   mem [ v + 5 ] .hh .v.RH = x ; 
  370.   if ( curstyle < 2 ) 
  371.   delta = fontinfo [ 20 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] 
  372.   .cint ; 
  373.   else delta = fontinfo [ 21 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] 
  374.   ] .cint ; 
  375.   x = vardelimiter ( q + 4 , cursize , delta ) ; 
  376.   mem [ x ] .hh .v.RH = v ; 
  377.   z = vardelimiter ( q + 5 , cursize , delta ) ; 
  378.   mem [ v ] .hh .v.RH = z ; 
  379.   mem [ q + 1 ] .cint = hpack ( x , 0 , 1 ) ; 
  380. scaled zmakeop ( q ) 
  381. halfword q ; 
  382. {register scaled Result; makeop_regmem 
  383.   scaled delta  ; 
  384.   halfword p, v, x, y, z  ; 
  385.   quarterword c  ; 
  386.   fourquarters i  ; 
  387.   scaled shiftup, shiftdown  ; 
  388.   if ( ( mem [ q ] .hh.b1 == 0 ) && ( curstyle < 2 ) ) 
  389.   mem [ q ] .hh.b1 = 1 ; 
  390.   if ( mem [ q + 1 ] .hh .v.RH == 1 ) 
  391.   {
  392.     fetch ( q + 1 ) ; 
  393.     if ( ( curstyle < 2 ) && ( ( ( curi .b2 ) % 4 ) == 2 ) ) 
  394.     {
  395.       c = curi .b3 ; 
  396.       i = fontinfo [ charbase [ curf ] + c ] .qqqq ; 
  397.       if ( ( i .b0 > 0 ) ) 
  398.       {
  399.     curc = c ; 
  400.     curi = i ; 
  401.     mem [ q + 1 ] .hh.b1 = c ; 
  402.       } 
  403.     } 
  404.     delta = fontinfo [ italicbase [ curf ] + ( curi .b2 ) / 4 ] .cint ; 
  405.     x = cleanbox ( q + 1 , curstyle ) ; 
  406.     if ( ( mem [ q + 3 ] .hh .v.RH != 0 ) && ( mem [ q ] .hh.b1 != 1 ) ) 
  407.     mem [ x + 1 ] .cint = mem [ x + 1 ] .cint - delta ; 
  408.     mem [ x + 4 ] .cint = half ( mem [ x + 3 ] .cint - mem [ x + 2 ] .cint ) - 
  409.     fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] .cint ; 
  410.     mem [ q + 1 ] .hh .v.RH = 2 ; 
  411.     mem [ q + 1 ] .hh .v.LH = x ; 
  412.   } 
  413.   else delta = 0 ; 
  414.   if ( mem [ q ] .hh.b1 == 1 ) 
  415.   {
  416.     x = cleanbox ( q + 2 , 2 * ( curstyle / 4 ) + 4 + ( curstyle % 2 ) ) ; 
  417.     y = cleanbox ( q + 1 , curstyle ) ; 
  418.     z = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ; 
  419.     v = newnullbox () ; 
  420.     mem [ v ] .hh.b0 = 1 ; 
  421.     mem [ v + 1 ] .cint = mem [ y + 1 ] .cint ; 
  422.     if ( mem [ x + 1 ] .cint > mem [ v + 1 ] .cint ) 
  423.     mem [ v + 1 ] .cint = mem [ x + 1 ] .cint ; 
  424.     if ( mem [ z + 1 ] .cint > mem [ v + 1 ] .cint ) 
  425.     mem [ v + 1 ] .cint = mem [ z + 1 ] .cint ; 
  426.     x = rebox ( x , mem [ v + 1 ] .cint ) ; 
  427.     y = rebox ( y , mem [ v + 1 ] .cint ) ; 
  428.     z = rebox ( z , mem [ v + 1 ] .cint ) ; 
  429.     mem [ x + 4 ] .cint = half ( delta ) ; 
  430.     mem [ z + 4 ] .cint = - (integer) mem [ x + 4 ] .cint ; 
  431.     mem [ v + 3 ] .cint = mem [ y + 3 ] .cint ; 
  432.     mem [ v + 2 ] .cint = mem [ y + 2 ] .cint ; 
  433.     if ( mem [ q + 2 ] .hh .v.RH == 0 ) 
  434.     {
  435.       freenode ( x , 7 ) ; 
  436.       mem [ v + 5 ] .hh .v.RH = y ; 
  437.     } 
  438.     else {
  439.     
  440.       shiftup = fontinfo [ 11 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH 
  441.       ] ] .cint - mem [ x + 2 ] .cint ; 
  442.       if ( shiftup < fontinfo [ 9 + parambase [ eqtb [ 4838 + cursize ] .hh 
  443.       .v.RH ] ] .cint ) 
  444.       shiftup = fontinfo [ 9 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] 
  445.       ] .cint ; 
  446.       p = newkern ( shiftup ) ; 
  447.       mem [ p ] .hh .v.RH = y ; 
  448.       mem [ x ] .hh .v.RH = p ; 
  449.       p = newkern ( fontinfo [ 13 + parambase [ eqtb [ 4838 + cursize ] .hh 
  450.       .v.RH ] ] .cint ) ; 
  451.       mem [ p ] .hh .v.RH = x ; 
  452.       mem [ v + 5 ] .hh .v.RH = p ; 
  453.       mem [ v + 3 ] .cint = mem [ v + 3 ] .cint + fontinfo [ 13 + parambase [ 
  454.       eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint + mem [ x + 3 ] .cint + mem 
  455.       [ x + 2 ] .cint + shiftup ; 
  456.     } 
  457.     if ( mem [ q + 3 ] .hh .v.RH == 0 ) 
  458.     freenode ( z , 7 ) ; 
  459.     else {
  460.     
  461.       shiftdown = fontinfo [ 12 + parambase [ eqtb [ 4838 + cursize ] .hh 
  462.       .v.RH ] ] .cint - mem [ z + 3 ] .cint ; 
  463.       if ( shiftdown < fontinfo [ 10 + parambase [ eqtb [ 4838 + cursize ] .hh 
  464.       .v.RH ] ] .cint ) 
  465.       shiftdown = fontinfo [ 10 + parambase [ eqtb [ 4838 + cursize ] .hh 
  466.       .v.RH ] ] .cint ; 
  467.       p = newkern ( shiftdown ) ; 
  468.       mem [ y ] .hh .v.RH = p ; 
  469.       mem [ p ] .hh .v.RH = z ; 
  470.       p = newkern ( fontinfo [ 13 + parambase [ eqtb [ 4838 + cursize ] .hh 
  471.       .v.RH ] ] .cint ) ; 
  472.       mem [ z ] .hh .v.RH = p ; 
  473.       mem [ v + 2 ] .cint = mem [ v + 2 ] .cint + fontinfo [ 13 + parambase [ 
  474.       eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint + mem [ z + 3 ] .cint + mem 
  475.       [ z + 2 ] .cint + shiftdown ; 
  476.     } 
  477.     mem [ q + 1 ] .cint = v ; 
  478.   } 
  479.   Result = delta ; 
  480.   return(Result) ; 
  481. void zmakeord ( q ) 
  482. halfword q ; 
  483. {/* 20 10 */ makeord_regmem 
  484.   integer a  ; 
  485.   halfword p, r  ; 
  486.   lab20: if ( mem [ q + 3 ] .hh .v.RH == 0 ) 
  487.   if ( mem [ q + 2 ] .hh .v.RH == 0 ) 
  488.   if ( mem [ q + 1 ] .hh .v.RH == 1 ) 
  489.   {
  490.     p = mem [ q ] .hh .v.RH ; 
  491.     if ( p != 0 ) 
  492.     if ( ( mem [ p ] .hh.b0 >= 16 ) && ( mem [ p ] .hh.b0 <= 22 ) ) 
  493.     if ( mem [ p + 1 ] .hh .v.RH == 1 ) 
  494.     if ( mem [ p + 1 ] .hh.b0 == mem [ q + 1 ] .hh.b0 ) 
  495.     {
  496.       mem [ q + 1 ] .hh .v.RH = 4 ; 
  497.       fetch ( q + 1 ) ; 
  498.       if ( ( ( curi .b2 ) % 4 ) == 1 ) 
  499.       {
  500.     a = ligkernbase [ curf ] + curi .b3 ; 
  501.     curc = mem [ p + 1 ] .hh.b1 ; 
  502.     curi = fontinfo [ a ] .qqqq ; 
  503.     if ( curi .b0 > 128 ) 
  504.     {
  505.       a = ligkernbase [ curf ] + 256 * curi .b2 + curi .b3 + 32768L - 256 
  506.       * ( 128 ) ; 
  507.       curi = fontinfo [ a ] .qqqq ; 
  508.     } 
  509.     while ( true ) {
  510.         
  511.       if ( curi .b1 == curc ) 
  512.       if ( curi .b0 <= 128 ) 
  513.       if ( curi .b2 >= 128 ) 
  514.       {
  515.         p = newkern ( fontinfo [ kernbase [ curf ] + 256 * curi .b2 + curi 
  516.         .b3 ] .cint ) ; 
  517.         mem [ p ] .hh .v.RH = mem [ q ] .hh .v.RH ; 
  518.         mem [ q ] .hh .v.RH = p ; 
  519.         return ; 
  520.       } 
  521.       else {
  522.           
  523.         {
  524.           if ( interrupt != 0 ) 
  525.           pauseforinstructions () ; 
  526.         } 
  527.         switch ( curi .b2 ) 
  528.         {case 1 : 
  529.         case 5 : 
  530.           mem [ q + 1 ] .hh.b1 = curi .b3 ; 
  531.           break ; 
  532.         case 2 : 
  533.         case 6 : 
  534.           mem [ p + 1 ] .hh.b1 = curi .b3 ; 
  535.           break ; 
  536.         case 3 : 
  537.         case 7 : 
  538.         case 11 : 
  539.           {
  540.         r = newnoad () ; 
  541.         mem [ r + 1 ] .hh.b1 = curi .b3 ; 
  542.         mem [ r + 1 ] .hh.b0 = mem [ q + 1 ] .hh.b0 ; 
  543.         mem [ q ] .hh .v.RH = r ; 
  544.         mem [ r ] .hh .v.RH = p ; 
  545.         if ( curi .b2 < 11 ) 
  546.         mem [ r + 1 ] .hh .v.RH = 1 ; 
  547.         else mem [ r + 1 ] .hh .v.RH = 4 ; 
  548.           } 
  549.           break ; 
  550.           default: 
  551.           {
  552.         mem [ q ] .hh .v.RH = mem [ p ] .hh .v.RH ; 
  553.         mem [ q + 1 ] .hh.b1 = curi .b3 ; 
  554.         mem [ q + 3 ] = mem [ p + 3 ] ; 
  555.         mem [ q + 2 ] = mem [ p + 2 ] ; 
  556.         freenode ( p , 4 ) ; 
  557.           } 
  558.           break ; 
  559.         } 
  560.         if ( curi .b2 > 3 ) 
  561.         return ; 
  562.         mem [ q + 1 ] .hh .v.RH = 1 ; 
  563.         goto lab20 ; 
  564.       } 
  565.       if ( curi .b0 >= 128 ) 
  566.       return ; 
  567.       a = a + curi .b0 + 1 ; 
  568.       curi = fontinfo [ a ] .qqqq ; 
  569.     } 
  570.       } 
  571.     } 
  572.   } 
  573. void zmakescripts ( q , delta ) 
  574. halfword q ; 
  575. scaled delta ; 
  576. {makescripts_regmem 
  577.   halfword p, x, y, z  ; 
  578.   scaled shiftup, shiftdown, clr  ; 
  579.   smallnumber t  ; 
  580.   p = mem [ q + 1 ] .cint ; 
  581.   if ( ( p >= himemmin ) ) 
  582.   {
  583.     shiftup = 0 ; 
  584.     shiftdown = 0 ; 
  585.   } 
  586.   else {
  587.       
  588.     z = hpack ( p , 0 , 1 ) ; 
  589.     if ( curstyle < 4 ) 
  590.     t = 16 ; 
  591.     else t = 32 ; 
  592.     shiftup = mem [ z + 3 ] .cint - fontinfo [ 18 + parambase [ eqtb [ 4837 + 
  593.     t ] .hh .v.RH ] ] .cint ; 
  594.     shiftdown = mem [ z + 2 ] .cint + fontinfo [ 19 + parambase [ eqtb [ 4837 
  595.     + t ] .hh .v.RH ] ] .cint ; 
  596.     freenode ( z , 7 ) ; 
  597.   } 
  598.   if ( mem [ q + 2 ] .hh .v.RH == 0 ) 
  599.   {
  600.     x = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ; 
  601.     mem [ x + 1 ] .cint = mem [ x + 1 ] .cint + eqtb [ 6742 ] .cint ; 
  602.     if ( shiftdown < fontinfo [ 16 + parambase [ eqtb [ 4837 + cursize ] .hh 
  603.     .v.RH ] ] .cint ) 
  604.     shiftdown = fontinfo [ 16 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH 
  605.     ] ] .cint ; 
  606.     clr = mem [ x + 3 ] .cint - ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4837 
  607.     + cursize ] .hh .v.RH ] ] .cint * 4 ) / 5 ) ; 
  608.     if ( shiftdown < clr ) 
  609.     shiftdown = clr ; 
  610.     mem [ x + 4 ] .cint = shiftdown ; 
  611.   } 
  612.   else {
  613.       
  614.     {
  615.       x = cleanbox ( q + 2 , 2 * ( curstyle / 4 ) + 4 + ( curstyle % 2 ) ) ; 
  616.       mem [ x + 1 ] .cint = mem [ x + 1 ] .cint + eqtb [ 6742 ] .cint ; 
  617.       if ( odd ( curstyle ) ) 
  618.       clr = fontinfo [ 15 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] 
  619.       .cint ; 
  620.       else if ( curstyle < 2 ) 
  621.       clr = fontinfo [ 13 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] 
  622.       .cint ; 
  623.       else clr = fontinfo [ 14 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH 
  624.       ] ] .cint ; 
  625.       if ( shiftup < clr ) 
  626.       shiftup = clr ; 
  627.       clr = mem [ x + 2 ] .cint + ( abs ( fontinfo [ 5 + parambase [ eqtb [ 
  628.       4837 + cursize ] .hh .v.RH ] ] .cint ) / 4 ) ; 
  629.       if ( shiftup < clr ) 
  630.       shiftup = clr ; 
  631.     } 
  632.     if ( mem [ q + 3 ] .hh .v.RH == 0 ) 
  633.     mem [ x + 4 ] .cint = - (integer) shiftup ; 
  634.     else {
  635.     
  636.       y = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ; 
  637.       mem [ y + 1 ] .cint = mem [ y + 1 ] .cint + eqtb [ 6742 ] .cint ; 
  638.       if ( shiftdown < fontinfo [ 17 + parambase [ eqtb [ 4837 + cursize ] .hh 
  639.       .v.RH ] ] .cint ) 
  640.       shiftdown = fontinfo [ 17 + parambase [ eqtb [ 4837 + cursize ] .hh 
  641.       .v.RH ] ] .cint ; 
  642.       clr = 4 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] 
  643.       ] .cint - ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ y + 3 ] .cint - 
  644.       shiftdown ) ) ; 
  645.       if ( clr > 0 ) 
  646.       {
  647.     shiftdown = shiftdown + clr ; 
  648.     clr = ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4837 + cursize ] .hh 
  649.     .v.RH ] ] .cint * 4 ) / 5 ) - ( shiftup - mem [ x + 2 ] .cint ) ; 
  650.     if ( clr > 0 ) 
  651.     {
  652.       shiftup = shiftup + clr ; 
  653.       shiftdown = shiftdown - clr ; 
  654.     } 
  655.       } 
  656.       mem [ x + 4 ] .cint = delta ; 
  657.       p = newkern ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ y + 3 ] .cint 
  658.       - shiftdown ) ) ; 
  659.       mem [ x ] .hh .v.RH = p ; 
  660.       mem [ p ] .hh .v.RH = y ; 
  661.       x = vpackage ( x , 0 , 1 , 1073741823L ) ; 
  662.       mem [ x + 4 ] .cint = shiftdown ; 
  663.     } 
  664.   } 
  665.   if ( mem [ q + 1 ] .cint == 0 ) 
  666.   mem [ q + 1 ] .cint = x ; 
  667.   else {
  668.       
  669.     p = mem [ q + 1 ] .cint ; 
  670.     while ( mem [ p ] .hh .v.RH != 0 ) p = mem [ p ] .hh .v.RH ; 
  671.     mem [ p ] .hh .v.RH = x ; 
  672.   } 
  673. smallnumber zmakeleftright ( q , style , maxd , maxh ) 
  674. halfword q ; 
  675. smallnumber style ; 
  676. scaled maxd ; 
  677. scaled maxh ; 
  678. {register smallnumber Result; makeleftright_regmem 
  679.   scaled delta, delta1, delta2  ; 
  680.   if ( style < 4 ) 
  681.   cursize = 0 ; 
  682.   else cursize = 16 * ( ( style - 2 ) / 2 ) ; 
  683.   delta2 = maxd + fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh 
  684.   .v.RH ] ] .cint ; 
  685.   delta1 = maxh + maxd - delta2 ; 
  686.   if ( delta2 > delta1 ) 
  687.   delta1 = delta2 ; 
  688.   delta = ( delta1 / 500 ) * eqtb [ 6181 ] .cint ; 
  689.   delta2 = delta1 + delta1 - eqtb [ 6740 ] .cint ; 
  690.   if ( delta < delta2 ) 
  691.   delta = delta2 ; 
  692.   mem [ q + 1 ] .cint = vardelimiter ( q + 1 , cursize , delta ) ; 
  693.   Result = mem [ q ] .hh.b0 - ( 10 ) ; 
  694.   return(Result) ; 
  695. void mlisttohlist ( ) 
  696. {/* 21 82 80 81 83 30 */ mlisttohlist_regmem 
  697.   halfword mlist  ; 
  698.   boolean penalties  ; 
  699.   smallnumber style  ; 
  700.   smallnumber savestyle  ; 
  701.   halfword q  ; 
  702.   halfword r  ; 
  703.   smallnumber rtype  ; 
  704.   smallnumber t  ; 
  705.   halfword p, x, y, z  ; 
  706.   integer pen  ; 
  707.   smallnumber s  ; 
  708.   scaled maxh, maxd  ; 
  709.   scaled delta  ; 
  710.   mlist = curmlist ; 
  711.   penalties = mlistpenalties ; 
  712.   style = curstyle ; 
  713.   q = mlist ; 
  714.   r = 0 ; 
  715.   rtype = 17 ; 
  716.   maxh = 0 ; 
  717.   maxd = 0 ; 
  718.   {
  719.     if ( curstyle < 4 ) 
  720.     cursize = 0 ; 
  721.     else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  722.     curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] .hh 
  723.     .v.RH ] ] .cint , 18 ) ; 
  724.   } 
  725.   while ( q != 0 ) {
  726.       
  727.     lab21: delta = 0 ; 
  728.     switch ( mem [ q ] .hh.b0 ) 
  729.     {case 18 : 
  730.       switch ( rtype ) 
  731.       {case 18 : 
  732.       case 17 : 
  733.       case 19 : 
  734.       case 20 : 
  735.       case 22 : 
  736.       case 30 : 
  737.     {
  738.       mem [ q ] .hh.b0 = 16 ; 
  739.       goto lab21 ; 
  740.     } 
  741.     break ; 
  742.     default: 
  743.     ; 
  744.     break ; 
  745.       } 
  746.       break ; 
  747.     case 19 : 
  748.     case 21 : 
  749.     case 22 : 
  750.     case 31 : 
  751.       {
  752.     if ( rtype == 18 ) 
  753.     mem [ r ] .hh.b0 = 16 ; 
  754.     if ( mem [ q ] .hh.b0 == 31 ) 
  755.     goto lab80 ; 
  756.       } 
  757.       break ; 
  758.     case 30 : 
  759.       goto lab80 ; 
  760.       break ; 
  761.     case 25 : 
  762.       {
  763.     makefraction ( q ) ; 
  764.     goto lab82 ; 
  765.       } 
  766.       break ; 
  767.     case 17 : 
  768.       {
  769.     delta = makeop ( q ) ; 
  770.     if ( mem [ q ] .hh.b1 == 1 ) 
  771.     goto lab82 ; 
  772.       } 
  773.       break ; 
  774.     case 16 : 
  775.       makeord ( q ) ; 
  776.       break ; 
  777.     case 20 : 
  778.     case 23 : 
  779.       ; 
  780.       break ; 
  781.     case 24 : 
  782.       makeradical ( q ) ; 
  783.       break ; 
  784.     case 27 : 
  785.       makeover ( q ) ; 
  786.       break ; 
  787.     case 26 : 
  788.       makeunder ( q ) ; 
  789.       break ; 
  790.     case 28 : 
  791.       makemathaccent ( q ) ; 
  792.       break ; 
  793.     case 29 : 
  794.       makevcenter ( q ) ; 
  795.       break ; 
  796.     case 14 : 
  797.       {
  798.     curstyle = mem [ q ] .hh.b1 ; 
  799.     {
  800.       if ( curstyle < 4 ) 
  801.       cursize = 0 ; 
  802.       else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  803.       curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] 
  804.       .hh .v.RH ] ] .cint , 18 ) ; 
  805.     } 
  806.     goto lab81 ; 
  807.       } 
  808.       break ; 
  809.     case 15 : 
  810.       {
  811.     switch ( curstyle / 2 ) 
  812.     {case 0 : 
  813.       {
  814.         p = mem [ q + 1 ] .hh .v.LH ; 
  815.         mem [ q + 1 ] .hh .v.LH = 0 ; 
  816.       } 
  817.       break ; 
  818.     case 1 : 
  819.       {
  820.         p = mem [ q + 1 ] .hh .v.RH ; 
  821.         mem [ q + 1 ] .hh .v.RH = 0 ; 
  822.       } 
  823.       break ; 
  824.     case 2 : 
  825.       {
  826.         p = mem [ q + 2 ] .hh .v.LH ; 
  827.         mem [ q + 2 ] .hh .v.LH = 0 ; 
  828.       } 
  829.       break ; 
  830.     case 3 : 
  831.       {
  832.         p = mem [ q + 2 ] .hh .v.RH ; 
  833.         mem [ q + 2 ] .hh .v.RH = 0 ; 
  834.       } 
  835.       break ; 
  836.     } 
  837.     flushnodelist ( mem [ q + 1 ] .hh .v.LH ) ; 
  838.     flushnodelist ( mem [ q + 1 ] .hh .v.RH ) ; 
  839.     flushnodelist ( mem [ q + 2 ] .hh .v.LH ) ; 
  840.     flushnodelist ( mem [ q + 2 ] .hh .v.RH ) ; 
  841.     mem [ q ] .hh.b0 = 14 ; 
  842.     mem [ q ] .hh.b1 = curstyle ; 
  843.     mem [ q + 1 ] .cint = 0 ; 
  844.     mem [ q + 2 ] .cint = 0 ; 
  845.     if ( p != 0 ) 
  846.     {
  847.       z = mem [ q ] .hh .v.RH ; 
  848.       mem [ q ] .hh .v.RH = p ; 
  849.       while ( mem [ p ] .hh .v.RH != 0 ) p = mem [ p ] .hh .v.RH ; 
  850.       mem [ p ] .hh .v.RH = z ; 
  851.     } 
  852.     goto lab81 ; 
  853.       } 
  854.       break ; 
  855.     case 3 : 
  856.     case 4 : 
  857.     case 5 : 
  858.     case 8 : 
  859.     case 12 : 
  860.     case 7 : 
  861.       goto lab81 ; 
  862.       break ; 
  863.     case 2 : 
  864.       {
  865.     if ( mem [ q + 3 ] .cint > maxh ) 
  866.     maxh = mem [ q + 3 ] .cint ; 
  867.     if ( mem [ q + 2 ] .cint > maxd ) 
  868.     maxd = mem [ q + 2 ] .cint ; 
  869.     goto lab81 ; 
  870.       } 
  871.       break ; 
  872.     case 10 : 
  873.       {
  874.     if ( mem [ q ] .hh.b1 == 99 ) 
  875.     {
  876.       x = mem [ q + 1 ] .hh .v.LH ; 
  877.       y = mathglue ( x , curmu ) ; 
  878.       deleteglueref ( x ) ; 
  879.       mem [ q + 1 ] .hh .v.LH = y ; 
  880.       mem [ q ] .hh.b1 = 0 ; 
  881.     } 
  882.     else if ( ( cursize != 0 ) && ( mem [ q ] .hh.b1 == 98 ) ) 
  883.     {
  884.       p = mem [ q ] .hh .v.RH ; 
  885.       if ( p != 0 ) 
  886.       if ( ( mem [ p ] .hh.b0 == 10 ) || ( mem [ p ] .hh.b0 == 11 ) ) 
  887.       {
  888.         mem [ q ] .hh .v.RH = mem [ p ] .hh .v.RH ; 
  889.         mem [ p ] .hh .v.RH = 0 ; 
  890.         flushnodelist ( p ) ; 
  891.       } 
  892.     } 
  893.     goto lab81 ; 
  894.       } 
  895.       break ; 
  896.     case 11 : 
  897.       {
  898.     mathkern ( q , curmu ) ; 
  899.     goto lab81 ; 
  900.       } 
  901.       break ; 
  902.       default: 
  903.       confusion ( 882 ) ; 
  904.       break ; 
  905.     } 
  906.     switch ( mem [ q + 1 ] .hh .v.RH ) 
  907.     {case 1 : 
  908.     case 4 : 
  909.       {
  910.     fetch ( q + 1 ) ; 
  911.     if ( ( curi .b0 > 0 ) ) 
  912.     {
  913.       delta = fontinfo [ italicbase [ curf ] + ( curi .b2 ) / 4 ] .cint ; 
  914.       p = newcharacter ( curf , curc ) ; 
  915.       if ( ( mem [ q + 1 ] .hh .v.RH == 4 ) && ( fontinfo [ 2 + parambase 
  916.       [ curf ] ] .cint != 0 ) ) 
  917.       delta = 0 ; 
  918.       if ( ( mem [ q + 3 ] .hh .v.RH == 0 ) && ( delta != 0 ) ) 
  919.       {
  920.         mem [ p ] .hh .v.RH = newkern ( delta ) ; 
  921.         delta = 0 ; 
  922.       } 
  923.     } 
  924.     else p = 0 ; 
  925.       } 
  926.       break ; 
  927.     case 0 : 
  928.       p = 0 ; 
  929.       break ; 
  930.     case 2 : 
  931.       p = mem [ q + 1 ] .hh .v.LH ; 
  932.       break ; 
  933.     case 3 : 
  934.       {
  935.     curmlist = mem [ q + 1 ] .hh .v.LH ; 
  936.     savestyle = curstyle ; 
  937.     mlistpenalties = false ; 
  938.     mlisttohlist () ; 
  939.     curstyle = savestyle ; 
  940.     {
  941.       if ( curstyle < 4 ) 
  942.       cursize = 0 ; 
  943.       else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  944.       curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] 
  945.       .hh .v.RH ] ] .cint , 18 ) ; 
  946.     } 
  947.     p = hpack ( mem [ memtop - 3 ] .hh .v.RH , 0 , 1 ) ; 
  948.       } 
  949.       break ; 
  950.       default: 
  951.       confusion ( 883 ) ; 
  952.       break ; 
  953.     } 
  954.     mem [ q + 1 ] .cint = p ; 
  955.     if ( ( mem [ q + 3 ] .hh .v.RH == 0 ) && ( mem [ q + 2 ] .hh .v.RH == 0 ) 
  956.     ) 
  957.     goto lab82 ; 
  958.     makescripts ( q , delta ) ; 
  959.     lab82: z = hpack ( mem [ q + 1 ] .cint , 0 , 1 ) ; 
  960.     if ( mem [ z + 3 ] .cint > maxh ) 
  961.     maxh = mem [ z + 3 ] .cint ; 
  962.     if ( mem [ z + 2 ] .cint > maxd ) 
  963.     maxd = mem [ z + 2 ] .cint ; 
  964.     freenode ( z , 7 ) ; 
  965.     lab80: r = q ; 
  966.     rtype = mem [ r ] .hh.b0 ; 
  967.     lab81: q = mem [ q ] .hh .v.RH ; 
  968.   } 
  969.   if ( rtype == 18 ) 
  970.   mem [ r ] .hh.b0 = 16 ; 
  971.   p = memtop - 3 ; 
  972.   mem [ p ] .hh .v.RH = 0 ; 
  973.   q = mlist ; 
  974.   rtype = 0 ; 
  975.   curstyle = style ; 
  976.   {
  977.     if ( curstyle < 4 ) 
  978.     cursize = 0 ; 
  979.     else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  980.     curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] .hh 
  981.     .v.RH ] ] .cint , 18 ) ; 
  982.   } 
  983.   while ( q != 0 ) {
  984.       
  985.     t = 16 ; 
  986.     s = 4 ; 
  987.     pen = 10000 ; 
  988.     switch ( mem [ q ] .hh.b0 ) 
  989.     {case 17 : 
  990.     case 20 : 
  991.     case 21 : 
  992.     case 22 : 
  993.     case 23 : 
  994.       t = mem [ q ] .hh.b0 ; 
  995.       break ; 
  996.     case 18 : 
  997.       {
  998.     t = 18 ; 
  999.     pen = eqtb [ 6172 ] .cint ; 
  1000.       } 
  1001.       break ; 
  1002.     case 19 : 
  1003.       {
  1004.     t = 19 ; 
  1005.     pen = eqtb [ 6173 ] .cint ; 
  1006.       } 
  1007.       break ; 
  1008.     case 16 : 
  1009.     case 29 : 
  1010.     case 27 : 
  1011.     case 26 : 
  1012.       ; 
  1013.       break ; 
  1014.     case 24 : 
  1015.       s = 5 ; 
  1016.       break ; 
  1017.     case 28 : 
  1018.       s = 5 ; 
  1019.       break ; 
  1020.     case 25 : 
  1021.       {
  1022.     t = 23 ; 
  1023.     s = 6 ; 
  1024.       } 
  1025.       break ; 
  1026.     case 30 : 
  1027.     case 31 : 
  1028.       t = makeleftright ( q , style , maxd , maxh ) ; 
  1029.       break ; 
  1030.     case 14 : 
  1031.       {
  1032.     curstyle = mem [ q ] .hh.b1 ; 
  1033.     s = 3 ; 
  1034.     {
  1035.       if ( curstyle < 4 ) 
  1036.       cursize = 0 ; 
  1037.       else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  1038.       curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] 
  1039.       .hh .v.RH ] ] .cint , 18 ) ; 
  1040.     } 
  1041.     goto lab83 ; 
  1042.       } 
  1043.       break ; 
  1044.     case 8 : 
  1045.     case 12 : 
  1046.     case 2 : 
  1047.     case 7 : 
  1048.     case 5 : 
  1049.     case 3 : 
  1050.     case 4 : 
  1051.     case 10 : 
  1052.     case 11 : 
  1053.       {
  1054.     mem [ p ] .hh .v.RH = q ; 
  1055.     p = q ; 
  1056.     q = mem [ q ] .hh .v.RH ; 
  1057.     mem [ p ] .hh .v.RH = 0 ; 
  1058.     goto lab30 ; 
  1059.       } 
  1060.       break ; 
  1061.       default: 
  1062.       confusion ( 884 ) ; 
  1063.       break ; 
  1064.     } 
  1065.     if ( rtype > 0 ) 
  1066.     {
  1067.       switch ( strpool [ rtype * 8 + t + magicoffset ] ) 
  1068.       {case 48 : 
  1069.     x = 0 ; 
  1070.     break ; 
  1071.       case 49 : 
  1072.     if ( curstyle < 4 ) 
  1073.     x = 15 ; 
  1074.     else x = 0 ; 
  1075.     break ; 
  1076.       case 50 : 
  1077.     x = 15 ; 
  1078.     break ; 
  1079.       case 51 : 
  1080.     if ( curstyle < 4 ) 
  1081.     x = 16 ; 
  1082.     else x = 0 ; 
  1083.     break ; 
  1084.       case 52 : 
  1085.     if ( curstyle < 4 ) 
  1086.     x = 17 ; 
  1087.     else x = 0 ; 
  1088.     break ; 
  1089.     default: 
  1090.     confusion ( 886 ) ; 
  1091.     break ; 
  1092.       } 
  1093.       if ( x != 0 ) 
  1094.       {
  1095.     y = mathglue ( eqtb [ 3782 + x ] .hh .v.RH , curmu ) ; 
  1096.     z = newglue ( y ) ; 
  1097.     mem [ y ] .hh .v.RH = 0 ; 
  1098.     mem [ p ] .hh .v.RH = z ; 
  1099.     p = z ; 
  1100.     mem [ z ] .hh.b1 = x + 1 ; 
  1101.       } 
  1102.     } 
  1103.     if ( mem [ q + 1 ] .cint != 0 ) 
  1104.     {
  1105.       mem [ p ] .hh .v.RH = mem [ q + 1 ] .cint ; 
  1106.       do {
  1107.       p = mem [ p ] .hh .v.RH ; 
  1108.       } while ( ! ( mem [ p ] .hh .v.RH == 0 ) ) ; 
  1109.     } 
  1110.     if ( penalties ) 
  1111.     if ( mem [ q ] .hh .v.RH != 0 ) 
  1112.     if ( pen < 10000 ) 
  1113.     {
  1114.       rtype = mem [ mem [ q ] .hh .v.RH ] .hh.b0 ; 
  1115.       if ( rtype != 12 ) 
  1116.       if ( rtype != 19 ) 
  1117.       {
  1118.     z = newpenalty ( pen ) ; 
  1119.     mem [ p ] .hh .v.RH = z ; 
  1120.     p = z ; 
  1121.       } 
  1122.     } 
  1123.     rtype = t ; 
  1124.     lab83: r = q ; 
  1125.     q = mem [ q ] .hh .v.RH ; 
  1126.     freenode ( r , s ) ; 
  1127.     lab30: ; 
  1128.   } 
  1129.